package org.uca.dss.curso2011.grupo5;

import org.uca.dss.curso2011.grupo5.gestionAsientos.AleatorioAsientos;
import org.uca.dss.curso2011.grupo5.gestionAsientos.AsignarAsiento;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.query.Predicate;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.joda.time.LocalDate;
import org.uca.dss.curso2011.grupo5.interfazExtendido.InterfazCompras;
import org.uca.dss.curso2011.grupo5.interfazExtendido.InformacionTrayecto;
import org.uca.dss.curso2011.grupo5.interfazExtendido.Itinerario;
import org.uca.dss.curso2011.grupo5.interfazExtendido.ReservaTrayecto;

/**
 * Main
 *
 */
public class App 
{

    public static int A;
    public static AsignarAsiento asignarAsiento = new AsignarAsiento();
    /**
     *
     * @param args
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static void main( String[] args ) throws FileNotFoundException, IOException, CloneNotSupportedException
    {
        DBUtils.initDataBase("./src/main/resources/BaseDatos.db4o");
        ObjectContainer database = DBUtils.getDb();

        CargaTrayectos ctr = new CargaTrayectos();
        List<Trayecto> ltrayectos = ctr.obtenerTrayectos("./src/main/resources/trayectos.csv","./src/main/resources/trenes.csv");

        asignarAsiento.setEstrategiaSeleccion(new AleatorioAsientos(ltrayectos));

       Transbordo t = new Transbordo(ltrayectos);
       Iterator<Itinerario> itinerarios = t.obtenerItinerarios("Cadiz", "Madrid", new LocalDate()).iterator();


       InterfazCompras compras = new GestionReservas(ltrayectos);
       List<ReservaTrayecto> lreservasTrayecto = new ArrayList<ReservaTrayecto>();
       int asientosLibres;

       while(itinerarios.hasNext())
       {
           Itinerario iti = itinerarios.next();

           Iterator<InformacionTrayecto> iiti = iti.iterator();
           int i = 0;

           for(InformacionTrayecto it : iti)
           {
                i = ++i;
                System.out.println("*************  INFORMACION TRAYECTO " +  i + " ************** " );
                System.out.println("Origen: " + it.getOrigen());
                System.out.println("Destino: " + it.getDestino());
                System.out.println("Hora salida: " + it.getHoraSalida());
                System.out.println("Precio: " + it.getPrecio());
                System.out.println();
           }

           System.out.println("Precio transbordos: " + iti.getPrecio());

           System.out.println("*************  RESERVA ASIENTO TRANSBORDO ************** " );
           lreservasTrayecto = compras.reservaAsiento(iti, new LocalDate());
           for (ReservaTrayecto rt: lreservasTrayecto)
           {
               System.out.println("El código de la reserva es " + rt.getCodigoReserva());
           }

           System.out.println("***************************************************** " );

           asientosLibres = compras.asientosLibres(new LocalDate(), iti);
           System.out.println("Número de asientos libres: " + asientosLibres);

        }


            ObjectSet<ReservaTrayecto> reservasTrayecto = database.query(new Predicate<ReservaTrayecto>() {
                @Override
                public boolean match(ReservaTrayecto et) {
                    return true;
             }

            });

            System.out.println("Número de reservas: " + reservasTrayecto.size());
       
        DBUtils.clear();
    }
}
